package com.taotaojs.mybootsuper.service2impl;

import com.taotaojs.mybootsuper.bean.BaseBean;
import org.apache.ibatis.jdbc.SQL;

import java.util.List;

/**
 * 通用Service基本方法
 * @author: TaoTaojs
 * @Date: 2020年03月20日15:49:46
 * @Description:
 * 用于创建service中的通用方法
 * @关联类:
 * @参考链接：
 */
public interface IMyBasicService<T extends BaseBean> extends IMyBatchService<T> {

    /**
     * 使用sql查询
     * @param sql
     * @return
     */
    List<T> findBySql(String sql);
    /**
     * 使用sql查询
     * @param sql
     * @return
     */
    List<T> findBySql(SQL sql);

    /**
     * 使用sql更新
     * @param sql
     * @return
     */
    Integer updateBySql(SQL sql);
    /**
     * 使用sql更新
     * @param sql
     * @return
     */
    Integer updateBySql(String sql);

    /**
     * 使用sql新增
     * @param sql
     * @return
     */
    Integer insertBySql(SQL sql);
    /**
     * 使用sql新增
     * @param sql
     * @return
     */
    Integer insertBySql(String sql);

    /**
     * 使用sql删除
     * @param sql
     * @return
     */
    Integer deleteBySql(SQL sql);
    /**
     * 使用sql删除
     * @param sql
     * @return
     */
    Integer deleteBySql(String sql);

    /**
     * 查询所有数据
     * @return
     */
    List<T> findAll();

    /**
     * 如果存在id就更新，如果不存在就插入(不更新空值)
     * @param entity
     * @return
     */
    T addOrUpdateObject(T entity);

    /**
     * 如果存在id就更新，如果不存在就插入(不更新空值)
     * @param entity 实体类
     * @param upNull 是否更新空值
     * @return
     */
    T addOrUpdateObject(T entity, boolean upNull);

    /**
     * 更新单个对象
     * @param entity
     * @param upNull
     * @return
     */
    Integer updateObject(T entity, boolean upNull);

    /**
     * 新增单个对象
     * @param entity
     * @param upNull
     * @return
     */
    Integer insertObject(T entity, boolean upNull);

    /**
     * 删除单个对象
     * @param entity
     * @return
     */
    public int deleteObject(T entity);

    /**
     * 根据主键删除对象
     * @param id
     * @return
     */
    public int deleteObject(Object id);

    /**
     * 假删除单个对象
     * @param entity
     * @return
     */
    public Integer updateByDeleteObject(T entity);

    /**
     * 根据对象查询数据
     * @param entity
     * @return
     */
    public List<T> findObject(T entity);

}
